package com.xuecheng.content.convert;

import com.xuecheng.api.content.model.dto.CourseBaseDTO;
import com.xuecheng.api.content.model.dto.CourseMarketDTO;
import com.xuecheng.api.content.model.dto.CourseTeacherDTO;
import com.xuecheng.api.content.model.vo.CourseAuditVO;
import com.xuecheng.api.content.model.vo.CourseBaseVO;
import com.xuecheng.content.entity.CourseBase;
import com.xuecheng.content.entity.CourseMarket;
import com.xuecheng.content.entity.CourseTeacher;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers;

import java.util.List;

/* 对象属性转换器： * PS：将MapStruct依赖添加到工程中 *
1.创建一个接口并在类上添加 @Mapper 注解 *
2.在接口通过MapStruct的api创建出接口的实例对象 *
3.转换方法 * 传入参数、传出参数 * 将传入参数里的数据会赋值给传出参数
特点： * 1.对象中的属性转换数据时，默认情况下将两个对象中的同属性名进行赋值操作 */
@Mapper
public interface CourseBaseConvert {
    CourseBaseConvert INSTANCE = Mappers.getMapper(CourseBaseConvert.class);

    // 将po转为dto数据
    @Mapping(source = "id", target = "courseBaseId")
    CourseBaseDTO entity2dto(CourseBase courseBase);

    @Mappings({
            @Mapping(source = "courseBaseId", target = "id")
    })
    //将 DTO 转为 po
    CourseBase dto2entity(CourseBaseDTO dto);


    // 将pos转为dtos数据
    // 集合的方法会依赖于单个数据转换的方法 * entitys2dtos-》entity2dto * Mapping注解是使用在单个数据转换方法上的，不是在集合方法上来使用 * */
    List<CourseBaseDTO> entitys2dtos(List<CourseBase> courseBase);

    @Mappings({
            @Mapping(source = "courseId", target = "id")
    })
    //将 DTO 转为 po
    CourseMarket dto2Marketpo(CourseMarketDTO dto);


    // 将vo转为dto数据
    @Mapping(source = "courseBaseId",target = "courseBaseId")
    CourseBaseDTO vo2dto(CourseBaseVO vo);

    // 将vo转为vo2auditDto数据
    CourseBaseDTO vo2auditDto(CourseAuditVO vo);

    // 将PO转为Dto数据
    @Mapping(source = "id",target = "courseTeacherId")
    CourseTeacherDTO entity2dto(CourseTeacher courseTeacher);

    @Mapping(source = "courseTeacherId",target = "id")
    CourseTeacher dto2po(CourseTeacherDTO dto);

    List<CourseTeacherDTO> pos2dtos(List<CourseTeacher> teacherList);




}